package com.liufei.complexity;

/**
 * 时间、空间复杂度分析
 * https://time.geekbang.org/column/article/40036
 * O(n) 时间复杂度
 */
public class Analysis {
    /**
     * 大O复杂度表示法
     * 算法的执行效率，粗略的讲，就是算法代码的执行时间。但是，如何在不运行代码的情况下，用肉眼得到一段代码的执行时间呢
     * 求1/2/3/4...n累加和
     */

    public static int cal(int n){
        /**
         * 从CPU的角度来看，这段代码的每一行都执行类似的操作：读数据-运算-写数据。
         * 假设每行代码执行时间都一样。为unit_time/在这个假设基础上，这段代码的中执行时间是多少呢
         * （2n+2）*unit_time
         */
        int sum=0;
        int i=0;
        for (;i<=n;++i){
            sum=sum+i;
        }
        System.out.println("1,2,3,4...n累加： "+sum);
        return sum;
    }

    static int cal2(int n){
        /**
         * (2n)
         */
        int sum=0;
        int i=1;
        int j=1;
        for (;i<=n;++i){
            j=1;
            for (;j<=n;++j){
                sum=sum+i*j;
                System.out.print(i+"*"+j+" ");
            }
        }
        System.out.println("1,2,3,4...n累加： "+sum);
        return sum;
    }

    public static void main(String[] args) {
        cal2(2);
    }
}
